Windows7、8でUnity連携


概要

制作、販売しているUnityのAssetで、Windowsにも対応しよう、みたいな事をしていた。


具体的には、

・AssetとUnity以外を特別にインストールしない前提で

・Unityと連携して、特定のタイミングでUnityのビルドを走らせる

・メッセージを表示する

ということがしたかった。

需要が無いと思っていたし、勝手も解らなかったので、

Windows用にはそのへん用意するつもりが無かったんだが、

使ってみるとUnityにビルドさせる機構は必須だみたいな話もらったので、はい。

作る。



Unityと連携して、特定のタイミングでUnityのビルドを走らせる

UnityにそんなAPIは無い。


で、Mac側でも使った手として、アプリケーションがアクティブになるとコンパイルが走る、という特性を悪用する。


APIがあればぜひそれを使うべきだと思っているが、無い上に有用なのでしょうがない。

どのくらい有用かはこの辺を見てほしい。



WIndows用のexeで、フォーカス変更するのを作る

下記メソッドでWindowへとフォーカスを与えることが出来た。


IntPtr hWnd = FindWindow(null, windowTitle);

if (hWnd != IntPtr.Zero)

{

    SetForegroundWindow(hWnd);

}


で、上記のwindowTitleをどうしようかと。

WindowsのアプリケーションごとのWindow名ってものすごい状態なのな。

プロセス名なら画一的な内容になるので、プロセス名をキーに、そのプロセスが所持している

Windowの名称を取得するようにして、無事動作した。


最終的にコマンドラインアプリケーションにできた。

SwitchApp.exe -f app_process_name -t app_process_name

アプリケーションの種類をWindowsApplicationに設定する事で、このSwitchApp自体はWindow無しで動作する。


from と to の間隔が短すぎると、Unityのビルドが始まらないことが多々あった。このへんMacとは違う。

Sleepをいれて、、、場当たり的に、、、こう、、


ただどーーーもSleepはやっぱり駄目みたいで、動いたり動かなかったりする。

このへんは暫定的に別の方法で解消した。


リポジトリ

https://github.com/sassembla/WinSwitchApp


メッセージを表示する

MacだとNotificationCenterとか、Growlとか通知系がけっこうあったので、

似たようなものを使いたく。



Win8でのToast

7ではそういうのは無い、、と思う。無理してつけてもなーもう時代おくr

で、このへんもアプリケーションにして出すと思う。